package bbalgae;

/*
 * 기본 클래스 Base Class
 * 일부 인터페이스가 많은 추상 메소드를 가지고 있는 경우, 이것을 구현하는 클래스는 이 모든 메소드를 재정의해야함.
 * 하지만 , 실제 사용하는 메소드C가 일부C라면 이것은 
 * 불필요한 메소드 ABDE를 재정의하는 것은 지루하고 비효율적인 작업이 될 수 있음.
 * 
 * 이런 경우 구현클래스를 일반클래스로 확장하여 수정하기를 원하는 메소드만 재정의함 이러한 용도로 사용하는 클래스를 
 * Base Class 라 함 
 * 아래 예에서는 BadInterface를 구현한 BadClass 를 확장하여 GoodClass1, GoodClass2를 
 * 만듬
 * 자바 웹 프로그래밍에서 Servlet클래스를 만들때 Servelet이라는 5개의 추상 메소드를 포함한 인터페이스를 사용한다
 * 이런 경우 다 사용하지 않음에도 불구하고 5개의 추상메소드에 대한 구현 코드를 모두 작성 
 * 이에대한 해결책으로 GenericServlet이라는 클래스를 확장하면 단 하나의 메소드 Service 메소드만 재정의해서 사용하면 됨
 * 여기서 GenericServlet은 base class임
 */
public class J29_BaseClass {

	public static void main(String[] args) {
 
	}

}

interface BadInterface {
	void A();

	char B();

	int C();

	String D();

	boolean E();
}

class BadClass implements BadInterface {

	@Override public void A() {	}

	@Override public char B() {return 0;}

	@Override public int C() {return 0;}

	@Override public String D() {return null;}

	@Override public boolean E() {return false;}

}

class GoodClass1 extends BadClass {
	@Override public int C() {return super.C();	}
}

class GoodClass2 extends BadClass {
	@Override public void A() {	}

	@Override public boolean E() {return super.E();
	}
}
